package com.venutech.gongan.dao;


import com.baomidou.mybatisplus.plugins.Page;
import com.venutech.gongan.dto.DeviceCountDTO;
import com.venutech.gongan.entity.Qdsxj;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 前端摄像机操作Dao接口
 */
@Mapper
public interface QdsxjMapper {
    //插入数据
    int insert(Qdsxj qdsxj);

    //根据id删除信息
    int deleteById(Integer sb_id);

    //根据id修改信息
    int updateQdsxj(Qdsxj qdsxj);

    int updateQdsxj2(Qdsxj qdsxj);

    //根据ID返回对象
    Qdsxj getById(Integer sb_id);

    Qdsxj getByIdForMontorType(Integer sb_id);

    //分页查询所有信息
    List<Qdsxj> getInfo(String begintime, String endtime, String badw, Page<Qdsxj> page, @Param("sb_name")String sb_name,@Param("sb_type")String sb_type,@Param("sb_state")String sb_state);

    List<Qdsxj> getInfoWithDataPrivilege(String begintime, String endtime, String badw, Page<Qdsxj> page, @Param("sb_name")String sb_name, @Param("field") String field, @Param("fieldValue")String fieldValue);


    //根据杆件经纬度查询附近设备列表
    List<Qdsxj> getEquipmentList(@Param("CORRECT_LONGITUDE") Double CORRECT_LONGITUDE, @Param("CORRECT_LATITUDE") Double CORRECT_LATITUDE,@Param("radius") Double radius);

    List<Qdsxj> getEquipmentListForMonitorType(@Param("CORRECT_LONGITUDE") Double CORRECT_LONGITUDE, @Param("CORRECT_LATITUDE") Double CORRECT_LATITUDE,@Param("radius") Double radius);

    //API
    //根据sb_bm返回对象
    Qdsxj getBySbBm(String sb_bm);

    Qdsxj getBySbBm2(String sb_bm);

    //获取设备状态
    String getEquipmentState(Integer equipmentId);

    /**
     * 根据设备编号和杆件编号来获取应对的设备数据和杆件数据
     * @param poleId 杆件编号
     * @param equipId 设备编号
     * @return
     */
    Qdsxj findQdsxjByEquipId(@Param("poleId") Integer poleId, @Param("equipId") Integer equipId);


    /**
     * 获取绑定表里面所有绑定的sb_id和设备sb_id
     * @return
     */
    List<Qdsxj> getCameraInEquipmenteList(@Param("CORRECT_LONGITUDE") String CORRECT_LONGITUDE,@Param("CORRECT_LATITUDE") String CORRECT_LATITUDE,@Param("radius") Double radius);

    List<Qdsxj> getCameraInEquipmenteListForMonitorType(@Param("CORRECT_LONGITUDE") String CORRECT_LONGITUDE,@Param("CORRECT_LATITUDE") String CORRECT_LATITUDE,@Param("radius") Double radius);

    List<Qdsxj> getAllEquipments();

    int updateQdsxjCorrectLongitudeAndLatitude(@Param("sb_id") int sb_id, @Param("correct_longitude") double correct_longitude, @Param("correct_latitude")  double correct_latitude);

    int updateQdsxjAccurateAddress(@Param("sb_id") int sb_id, @Param("accurate_address") String accurate_address, @Param("accurate_towncode") String accurate_towncode, @Param("accurate_townname") String accurate_townname);

    int updateQdsxjMonitorType(@Param("sb_id") int sbId, @Param("monitor_type") int monitorType);

    /**
     * @Author liuzhengli
     * @Description //TODO 获取所有设备
     * @Date  2021/8/10 0010 10:29
     * @Param * @param null:
     * @return
     */
    List<Qdsxj> getQdsxjList();

    /**
     * @Author liuzhengli
     * @Description //TODO 根据指定的半径来获取所有设备
     * @Date  2021/8/10 0010 10:42
     * @Param * @param null:
     * @return
     */
    List<Qdsxj> getQdsxjListBylatandlog(@Param("gw_jd") Double gw_jd, @Param("gw_wd") Double gw_wd, @Param("radius") Double radius);

    List<String> getSubAreaCodeByAreaCode(@Param("areaCode") String areaCode);

    List<Qdsxj> getEquipmentListBySubAreaCode(@Param("areaCode") String areaCode);

    double selectGeometry();

    List<Qdsxj> getCameraInEquipmenteList2(@Param("longitude")double longitude, @Param("latitude")double latitude,@Param("radius") double radius);

    List<String> getTownCodeByAreaCode(@Param("areaCode") String areaCode);

    List<Qdsxj> getEquipmentListByTownCode(@Param("townCode") String townCode);


    //设备总数
    int getSbCount();

    // 绑定杆位设备总数
    int getBoundSbCount();

    List<Qdsxj> getNotBindedEquipmentListByMonitorType(@Param("monitorType") int monitorType);

    int correctLongitudeAndLatitude(@Param("equipId")int equipId, @Param("longitude") double longitude, @Param("latitude") double latitude);
    /**
     *获取当天前端设备
     * @param
     * @return
     */
    List<Qdsxj> getQeviceAll(@Param("dateString") String dateString);

    /**
     * 根据日期来获取前端设备
     * @param startTime
     * @param endTime
     * @return
     */
    List<Qdsxj> getQeviceDayByStartTimeAndEndTime(@Param("startTime") String startTime, @Param("endTime") String endTime);

    int updateDeviceIdAndDomainId(@Param("equipId")int equipId, @Param("deviceId")String deviceId, @Param("domainId")String domainId);

    Qdsxj getDeviceIdByGbid(@Param("gbid")String gbid);

    List<Qdsxj> getQeviceByDay(@Param("starttime") String starttime,@Param("sb_name") String sb_name);

    /**
     * 根据日期来获取前端设备 根据gbid获取识别device_id和domain_id
     * @param gbid
     * @param deviceId
     *  @param domainId
     * @return
     */
    int updateDeviceAndDomain(@Param("gbid") String gbid, @Param("deviceId") String deviceId, @Param("domainId") String domainId);

    List<Qdsxj> getByEquipName(@Param("equipName") String equipName);

    Qdsxj getQdsxjBySbNameAndTypeList(@Param("sb_name") String sb_name,@Param("sb_type") String sb_type,@Param("sb_ywdw") String sb_ywdw);

    List<Qdsxj> getQdsxjBySbNameList();

    int updatedeviclanlog(@Param("sb_id") Integer sb_id, @Param("correct_latitude") Double correct_latitude, @Param("correct_longitude") Double correct_longitude);

    /**
     *设备在线率
     * @return
     */
    int getOnlineRate();

    Qdsxj getTaskByDev_code(@Param("dev_code") String dev_code);

    double getPerfactRate();

    List<Qdsxj> getQdsxList();

    List<Qdsxj> getQdsxjBySbTypeOnly(@Param("sb_type") String sb_type, @Param("sb_ywdw") String sb_ywdw);

    Qdsxj getQdsxjBySbNameOnly(@Param("sb_name") String sb_name, @Param("sb_ywdw") String sb_ywdw,@Param("sb_type") String sb_type);

    List<Qdsxj> getQdsxYwdw();

    List<Qdsxj> getListByGwId(Integer gw_id);

    List<Qdsxj> getAllFault();

    /**
     * 计算所有设备数量
     * @return
     */
    int countAll();

    /**
     * 根据设备类型统计
     * @return
     */
    List<DeviceCountDTO> countByDeviceType();

    /**
     * 统计绑定杆位的设备数量
     * @return
     */
    int countBindGw();
}
